package net.wangds.filler;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public interface Filler<T> {

    Map<Class, Filler> FILLER_MAP = new ConcurrentHashMap<>();


    @SuppressWarnings("unchecked")
    static <T> Filler<T> findFiller(Class<?> clz){
        Filler<T> res = (Filler<T>)FILLER_MAP.get(clz);
        if(res==null){
            for(Map.Entry<Class, Filler> en:FILLER_MAP.entrySet()){
                Class<?> c = en.getKey();
                if(c.isAssignableFrom(clz)){
                    res = en.getValue();
                    break;
                }
            }
        }
        return res;
    }

    void fill(T target);

}
